﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace FoneBuddy.LinqModel.Data
{
    public interface IDataRepository
    {
        #region Country
        void CreateCountry(Country country);
        void DeleteCountry(Country country);
        void GetCountryById(Country country);
        void UpdateCountry(Country country);
        List<Country> GetCountryByName(string CountryName);
        List<Country> GetAllCountry();
        #endregion

        #region State
        void CreateState(State state);
        void DeleteState(State state);
        void GetStateById(State state);
        void UpdateState(State state);
        void GetStateByName(State state);
        List<State> GetAllState();
        List<State> GetStateByCountryId(State state);
        #endregion

        #region City
        void CreateCity(City city);
        void DeleteCity(City city);
        void GetCityById(City city);
        void UpdateCity(City city);
        void GetCityByName(City city);
        List<City> GetAllCity();
        List<City> GetCityByStateId(City city);
        #endregion

        #region Subscription
        void CreateSubscription(Subscription city);
        List<Subscription> GetAllSubscription();
        void DeleteSubscription(Subscription city);
        void GetSubscriptionById(Subscription city);
        void GetSubscriptionByName(Subscription subscription);
        void UpdateSubscription(Subscription subscription);
        #endregion

        #region Brand
        void CreateBrand(Brand brand);

        List<Brand> GetAllBrand();

        void DeleteBrand(Brand brand);

        void GetBrandById(Brand brand);

        void UpdateBrand(Brand brand);

        void GetBrandByName(Brand brand);

        #endregion

        #region Category
        void CreateCategory(Category brand);

        List<Category> GetAllCategory();

        void DeleteCategory(Category brand);

        void GetCategoryById(Category brand);

        void UpdateCategory(Category brand);

        void GetCategoryByName(Category brand);

        #endregion

        #region OS
        void CreateOs(OperatingSystemInfo os);

        List<OperatingSystemInfo> GetAllOs();

        void DeleteOs(OperatingSystemInfo os);

        void GetOsById(OperatingSystemInfo os);

        void UpdateOs(OperatingSystemInfo os);

        void GetOsByName(OperatingSystemInfo os);

        #endregion

        #region Color
        void CreateColor(Color color);

        List<Color> GetAllColor();

        void DeleteColor(Color color);

        void GetColorById(Color color);

        void UpdateColor(Color color);

        void GetColorByName(Color color);

        #endregion

        #region Camera
        void CreateCamera(Camera camera);

        List<Camera> GetAllCamera();

        void DeleteCamera(Camera camera);


        void GetCameraById(Camera camera);

        void UpdateCamera(Camera camera);

        void GetCameraByName(Camera camera);

        #endregion

        #region Filter
        void CreateFilter(FilterMaster filter);

        List<FilterMaster> GetAllFilter();

        void DeleteFilter(FilterMaster filter);

        void GetFilterById(FilterMaster filter);

        void UpdateFilter(FilterMaster filter);

        void GetFilterByName(FilterMaster filter);

        #endregion

        #region FilterDetail
        void CreateFilterDetail(FilterDetail filterDetail);

        List<FilterDetail> GetAllFilterDetail();

        void DeleteFilterDetail(FilterDetail filterDetail);

        void GetFilterDetailById(FilterDetail filterDetail);

        void UpdateFilterDetail(FilterDetail filterDetail);

        void GetFilterDetailByName(FilterDetail filterDetail);
        List<FilterDetail> GetAllFilterDetailByFilterId(FilterDetail filterDetail);

        #endregion

        #region Product
        void CreateProduct(Product product);
        string GenerateProductCode();
        List<Product> GetAllProduct();
        void GetProductByName(Product product);
        void UpdateProduct(Product product);
        void GetProductById(Product product);
        void DeleteProduct(Product product);
        #endregion

        #region ProductImage
        void CreateAllProductImage(List<ProductImageInfo> productImage);
        void CreateProductImage(ProductImageInfo productImage);
        List<LinqModel.ProductImageInfo> GetProductImagesById(ProductImageInfo productImage);
        void DeleteProductImage(ProductImageInfo productImage);
        List<LinqModel.ProductImageInfo> GetAllProductImage();
        #endregion

        #region Merchant
        void CreateMerchant(Merchant merchant);
        void GetMerchantByEmailId(Merchant merchant);
        List<Merchant> GetAllMerchant();
         void UpdateLoginInfo(Merchant merchant);
         void GetMerchantById(Merchant merchant);
         List<Merchant> GetAllActiveMerchant();
       List<Merchant> GetAllInActiveMerchant();
       string[] IsValidLogin(Merchant merchant);
        #endregion

        #region MechantSubscription
        void CreateMerchantSubscription(SubscriptionHistory merchant);
        void UpdatePaymentStatus(SubscriptionHistory subHistory);
        void GetSubscriptionHistoryById(SubscriptionHistory subHistory);
        List<SubscriptionHistory> GetSubscriptionHistoryByMerchantId(SubscriptionHistory subHistory);
        #endregion

        #region Address
        void CreateMerchantAddress(Address address);
        List<Address> GetAddressByMerchantId(Address address);
        void UpdateAddress(Address address);
        #endregion

        #region PromotionCode
        void CreatePromotionCode(PromotionCode pCode);
        string GeneratePromotionCode();
        List<PromotionCode> GetAllPromotionCode();
        void DeletePromotionCode(PromotionCode pCode);
        void GetPromotionCodeByCode(PromotionCode pCOde);
        void UpdateUsedCount(PromotionCode pCode);
        List<SP_GetAllPromotionCodeResult> GetAllPromotionCodeResult();
        void GetPromotionCodeById(PromotionCode pCode);
        void UpdateContectName(Merchant merchant);
        #endregion

        //#region MailMessage
        //void SendMessage(MailMessage mailmessage);
        //#endregion
    }
}
